package com.supersit.GZFDA.util;

import android.content.Context;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.LocationClientOption.LocationMode;

public class BaiDuMapUtils {
	public LocationClient mLocationClient = null;
	public BDLocationListener myListener;
	private GetBaiduLocationResult mGetBaiduLocationResult;
	private int span = 1000;
	private Context context;

	public BaiDuMapUtils(GetBaiduLocationResult mGetBaiduLocationResult,
			Context context, int span) {
		super();
		this.context = context;
		this.mGetBaiduLocationResult = mGetBaiduLocationResult;
		this.span = span;
		mLocationClient = new LocationClient(context);
		myListener = new MyLocationListener();
		initLocation();
		mLocationClient.registerLocationListener(myListener);
	}

	public BaiDuMapUtils(GetBaiduLocationResult mGetBaiduLocationResult,
			Context context) {
		super();
		this.context = context;
		this.mGetBaiduLocationResult = mGetBaiduLocationResult;
		mLocationClient = new LocationClient(context);
		myListener = new MyLocationListener();
		initLocation();
		mLocationClient.registerLocationListener(myListener);
	}

	private void initLocation() {
		LocationClientOption option = new LocationClientOption();
		option.setLocationMode(LocationMode.Hight_Accuracy);// 可选，默认高精度，设置定位模式，高精度，低功耗，仅设备
		option.setCoorType("bd09ll");// 可选，默认gcj02，设置返回的定位结果坐标系
		option.setScanSpan(span);// 可选，默认0，即仅定位一次，设置发起定位请求的间隔需要大于等于1000ms才是有效的
		option.setIsNeedAddress(true);// 可选，设置是否需要地址信息，默认不需要
		option.setOpenGps(true);// 可选，默认false,设置是否使用gps
		option.setLocationNotify(true);// 可选，默认false，设置是否当gps有效时按照1S1次频率输出GPS结果
		option.setIsNeedLocationDescribe(true);// 可选，默认false，设置是否需要位置语义化结果，可以在BDLocation.getLocationDescribe里得到，结果类似于“在北京天安门附近”
		option.setIsNeedLocationPoiList(true);// 可选，默认false，设置是否需要POI结果，可以在BDLocation.getPoiList里得到
		option.setIgnoreKillProcess(false);// 可选，默认true，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop的时候杀死这个进程，默认不杀死
		option.SetIgnoreCacheException(false);// 可选，默认false，设置是否收集CRASH信息，默认收集
		option.setEnableSimulateGps(false);// 可选，默认false，设置是否需要过滤gps仿真结果，默认需要
		mLocationClient.setLocOption(option);
	}

	public class MyLocationListener implements BDLocationListener {

		@Override
		public void onReceiveLocation(BDLocation location) {
			mGetBaiduLocationResult.onReceiveLocation(location);

		}
	}

	public interface GetBaiduLocationResult {
		public void onReceiveLocation(BDLocation location);
	}

	// 启动位置监听
	public void startListener() {
		mLocationClient.start();
	}

	// 停止位置监听
	public void stopListener() {
		if (null != mLocationClient)
			mLocationClient.stop();
	}

	/**
	 * 刷新定位
	 */
	public void refreshLocation() {
		mLocationClient.requestLocation();
	}

	/**
	 * 注销监听
	 */
	public void unRegisterLocationListener() {
		stopListener();
		mLocationClient.unRegisterLocationListener(myListener);
	}
}
